﻿var Implanta;
if (!Implanta) {
	Implanta = {};
}

(function () {
	
    if (typeof Implanta.SetCookie !== 'function') {
		Implanta.SetCookie = function(c_name, value, exdays){
            var exdate=new Date();
            exdate.setDate(exdate.getDate() + exdays);
            var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
            document.cookie=c_name + "=" + c_value;
		};
	}

     if (typeof Implanta.GetCookie !== 'function') {
		Implanta.GetCookie = function(c_name ){
            var i,x,y,ARRcookies=document.cookie.split(";");
            for (i=0;i<ARRcookies.length;i++)
            {
                x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
                y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
                x=x.replace(/^\s+|\s+$/g,"");
                if (x==c_name)
                {
                    return unescape(y);
                }
            }
            return '';
		};
	}

	if (typeof Implanta.SetDisabled !== 'function') {
		Implanta.SetDisabled = function(editor, statusDisabled){
			///	<summary>
			/// Função SetDisabled que depois desabilitar o editor, habilita o campo hidden interno para corrigir o bug no Firefox
			///	</summary>

			editor.SetEnabled(!statusDisabled);
			
			if (statusDisabled)
			{
				var el = editor.GetInputElement();
				el.disabled = false;
			}

		};
	}

	if (typeof Implanta.ToDateTime !== 'function') {
		Implanta.ToDateTime = function(Data){
			///	<summary>
			/// Converte uma string para o formato DateTime
			///	</summary>

			var toDateRe = new RegExp("^/Date\\((\\d+)\\)/$");

			if (!Data) {
				return null;
			}

			var constructor = Data.replace(toDateRe, "new Date($1)");
			if (constructor == Data) {
				throw 'Data inválida: "' + Data + '"';
			}

			return eval(constructor);

		};
	}

	if (typeof Implanta.GetHora !== 'function') {
		Implanta.GetHora = function(){
			///	<summary>
			/// Recupera a Data e Hora do servidor de aplicação
			///	</summary>

			var Horario = null;

			$.ajax({
				type: "POST",
				url: window.RaizAplicacao + "default.aspx/getHoras",
				data: "{}",
				contentType: "application/json; charset=utf-8",
				async: false,
				dataType: "json",
				success: function (valor) {
					Horario = valor.d;
				}
			});

			return Horario;
		};
	} 

	"00000000-0000-0000-0000-000000000000"

	if (typeof Implanta.GuidEmpty !== 'function') {
		Implanta.GuidEmpty = function(){
			///	<summary>
			/// Gera uma GUID vazia
			///	</summary>

			return "00000000-0000-0000-0000-000000000000";
		}
	}

	if (typeof Implanta.NewGuid !== 'function') {
		Implanta.NewGuid = function(){
			///	<summary>
			/// Gera uma nova GUID, a geração ocorre do lado do servidor
			///	</summary>
			var Guid = null;

			$.ajax({
				type: "POST",
				url: window.RaizAplicacao + "default.aspx/getGuid",
				data: "{}",
				contentType: "application/json; charset=utf-8",
				async: false,
				dataType: "json",
				success: function (valor) {
					Guid = valor.d;
				}
			});

			return Guid;
		};
	}

	if (typeof Implanta.IsGUID !== 'function') {
		Implanta.IsGUID = function(Guid){
			///	<summary>
			/// Valida um GUID
			///	</summary>
			///	<param name="Guid" type="String">
			/// Guid para validação
			///	</param>

			var Valido = false;

			var guidRegEx = /^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$/;

			if (guidRegEx.test(Guid)) {
				Valido = true;
			}

			return Valido;
		};
	}

	if (typeof Implanta.ValidaCPF !== 'function') {
		Implanta.ValidaCPF = function(CPF){
			///	<summary>
			/// Valida um CPF, a validação ocorre no servidor!
			///	</summary>
			///	<param name="CPF" type="String">
			/// CPF para validação
			///	</param>

			var Valido = false;

			$.ajax({
				type: "POST",
				url: window.RaizAplicacao + "default.aspx/ValidaCPF",
				data: "{CPF:" + CPF + "}",
				contentType: "application/json; charset=utf-8",
				dataType: "json",
				async: false,
				success: function (valor) {
					Valido = valor.d;
				}
			});

			return Valido;
		};
	}

	if (typeof Implanta.ValidaCNPJ !== 'function') {
		Implanta.ValidaCNPJ = function(CNPJ){
			///	<summary>
			/// Valida um CNPJ, a validação ocorre no servidor!
			///	</summary>
			///	<param name="CNPJ" type="String">
			/// CNPJ para validação
			///	</param>

			var Valido = false;

			$.ajax({
				type: "POST",
				url: window.RaizAplicacao + "default.aspx/ValidaCNPJ",
				data: "{CNPJ:" + CNPJ + "}",
				contentType: "application/json; charset=utf-8",
				dataType: "json",
				async: false,
				success: function (valor) {
					Valido = valor.d;
				}
			});

			return Valido;
		};
	}
	/// <sumary>
	/// Formatação de moeda 
	/// </sumary>
	/// <param name="numero" type="Decimal">
	/// Numero a formatar
	/// </param>
	/// <param name="decimais" type="int">
	/// numero de casas decimais
	/// </param>
	if (typeof Implanta.FormataMoeda !== 'function') {
				Implanta.FormataMoeda = function(numero,decimais, simbolo){
				  var Milhar = '.', pnt = ',' ;
				  var x = Math.round(numero * Math.pow(10,decimais));
				  var y = (''+Math.abs(x)).split('');
				  var z = y.length - decimais; 

				  if (z<0) 
					z--; 

				  for(var i = z; i < 0; i++)
					y.unshift('0'); 

				  y.splice(z, 0, pnt);
				  if(y[0] == pnt) y.unshift('0'); 

				  while (z > 3)
				  {
					z-=3;
					y.splice(z,0,Milhar);
				  } 
				  return simbolo+y.join('');
				};
			}
	
}());

function _StringFormatInline()
{
	var txt = this;
	for(var i=0;i<arguments.length;i++)
	{
		var exp = new RegExp('\\{' + (i) + '\\}','gm');
		txt = txt.replace(exp,arguments[i]);
	}
	return txt;
}

function _StringFormatStatic()
{
	for(var i=1;i<arguments.length;i++)
	{
		var exp = new RegExp('\\{' + (i-1) + '\\}','gm');
		arguments[0] = arguments[0].replace(exp,arguments[i]);
	}
	return arguments[0];
}

if(!String.prototype.format)
{
	String.prototype.format = _StringFormatInline;
}

if(!String.format)
{
	String.format = _StringFormatStatic;
}

if (!String.ToDecimal) {
	String.prototype.ToDecimal = function () {
		///	<summary>
		/// Converte uma string para decimal, respeitando as casas decimais
		///	</summary>
		var Retorno = this;

		if (!isNaN(Retorno))
			return 0;

		while(Retorno.indexOf(".") != -1)
			Retorno = Retorno.replace(".", "");

		Retorno = Retorno.replace(",", ".");
		
		return parseFloat(Retorno);
	};
}

if (!Number.ToValue) {
	Number.prototype.ToValue = function () {
		///	<summary>
		/// Converte um numero para string, respeitando as casas decimais. 
		/// Usar este metodo para conversão de decimal antes de passar aos componentes
		/// da DevExpress
		///	</summary>
		var Retorno = this.toString();

		if (isNaN(Retorno))
			return "";

		Retorno = Retorno.replace('.', ',')
		return Retorno;
	};
}

if (!String.ToValue) {
	String.prototype.IsNumber = function () {
		///	<summary>
		/// Determinar se é um número

		var Retorno = this.toString();
		if (typeof (Retorno) === 'string') {
			Retorno = Retorno.replace(/,/, ".");
		}
		return !isNaN(parseFloat(Retorno)) && isFinite(Retorno);
    };

    /// Determinar se um string é nulo ou vazio
    String.prototype.IsNullOrEmpty = function () {
        var _isNullOrEmpty = true;
        if (this)
            if (this.length > 0)
                _isNullOrEmpty = false;
        return _isNullOrEmpty;
    }

}
///


Implanta.BooleanOption = {
	All: 0,
	True: 1,
	False: 2
}

Implanta.ActionData = {
	None: 0,
	New: 1,
	Update: 2,
	Delete: 3
}

/// <sumary>
/// Recupera o valor de um parâmetro na url
/// </sumary>
/// <param name="key" type="string">
/// Nome do parâmetro
/// </param>
/// <param name="default_" type="string">
/// Valor default que deve ser retornado caso não encontre o parametro informado.
/// </param>
if (typeof Implanta.getUrlParameter !== 'function') {
    Implanta.getUrlParameter = function (key, default_) {
        if (default_ == null) default_ = "";
        key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
        var qs = regex.exec(window.location.href);
        if (qs == null)
            return default_;
        else
            return qs[1];
    }
}

if (typeof String.prototype.startsWith != 'function') {
    String.prototype.startsWith = function (str) {
        return this.indexOf(str) == 0;
    };
}

// Função para a paginação dos grids
function applyGotoBoxValue(grid, s) { if (grid.InCallback()) { return; } else { var pageIndex = parseInt(s.GetText()) - 1; if (pageIndex < 0) { pageIndex = 0; }; grid.GotoPage(pageIndex); }; }